package com.xbongbong.paas.print.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.pojo.dto.FormGetDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintAddDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintEditDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintGetDataByProcessDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintGetDataDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintGetDatasByProcessDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintGetDatasDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintGetDefaultDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintListDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintManageListDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintNameEditDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintTemplateSortDTO;
import com.xbongbong.paas.print.pojo.dto.PaasPrintUpdateDTO;
import com.xbongbong.paas.print.pojo.dto.SubFormAttrDataDTO;
import com.xbongbong.paas.print.pojo.vo.PaasPrintEditVO;
import com.xbongbong.paas.print.pojo.vo.PaasPrintListVO;
import com.xbongbong.paas.print.pojo.vo.PaasPrintManageListVO;
import com.xbongbong.paas.print.pojo.vo.PaasPrintNameEditVO;
import com.xbongbong.paas.print.pojo.vo.PaasPrintSaveVO;
import com.xbongbong.paas.print.pojo.vo.PrintDisplayAttrVO;
import com.xbongbong.paas.print.pojo.vo.SubFormAttrDataVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.paas.toolbox.wrap.BaseVO;
import com.xbongbong.pro.process.pojo.dto.ProcessFormFilterDTO;
import com.xbongbong.pro.process.pojo.vo.ProcessFormFilterVO;
import com.xbongbong.pro.template.pojo.dto.TemplateDTO;
import com.xbongbong.pro.template.pojo.vo.EnableVO;

/**
 * 创建时间： 2018/9/11 10:48
 * 修改时间： 2018/9/11 10:48 梁鲁江
 *
 * @author 梁鲁江
 */
public interface PaasPrintService {

    /**
     * 获取系统默认打印模板
     * @param paasPrintGetDefaultDTO 入参
     * @return 回参
     * @throws XbbException XbbException
     */
    PaasPrintEditVO getDefaultPrintTemplate(PaasPrintGetDefaultDTO paasPrintGetDefaultDTO) throws XbbException;

    /**
     * 新建打印模板
     * @param paasPrintAddDTO 新建入参
     * @return 保存回参
     * @throws XbbException XbbException
     */
    PaasPrintSaveVO addPaasPrintTemplate(PaasPrintAddDTO paasPrintAddDTO) throws XbbException;

    /**
     * 编辑打印模板
     * @param paasPrintUpdateDTO 更新入参
     * @return  保存回参
     * @throws XbbException XbbException
     */
    PaasPrintSaveVO updatePaasPrintTemplate(PaasPrintUpdateDTO paasPrintUpdateDTO) throws XbbException;

    /**
     * 编辑打印模板(获取)
     * @param paasPrintEditDTO 编辑入参
     * @return 回参
     * @throws XbbException XbbException
     */
    PaasPrintEditVO editPaasPrintTemplate(PaasPrintEditDTO paasPrintEditDTO) throws XbbException;

    /**
     * 获取打印模板列表基本信息
     * @param paasPrintListDTO 打印列表入参
     * @return 回参
     * @throws XbbException XbbException
     */
    PaasPrintListVO list(PaasPrintListDTO paasPrintListDTO) throws XbbException;

    /**
     * 打印模板管理列表
     * @param paasPrintManageListDTO 入参
     * @return 回参
     * @throws XbbException xbb异常
     */
    PaasPrintManageListVO manageList(PaasPrintManageListDTO paasPrintManageListDTO) throws XbbException;

    /**
     * 获取可打印的字段
     * @param formGetDTO 入参
     * @return 回参
     * @throws XbbException xbb异常
     */
    PrintDisplayAttrVO getDisPlayAttr(FormGetDTO formGetDTO) throws XbbException;

    /**
     * 获取某子表单的字段数据
     * @param subFormAttrDataDTO 入参
     * @return 回参
     * @throws XbbException xbb异常
     */
    SubFormAttrDataVO getSubFormAttrData(SubFormAttrDataDTO subFormAttrDataDTO) throws XbbException;

    /**
     * 删除打印模板
     * @param paasPrintEditDTO 入参
     * @return PaasPrintSaveVO
     * @throws XbbException xbb异常
     */
    PaasPrintSaveVO delete(PaasPrintEditDTO paasPrintEditDTO) throws XbbException;

    /**
     * 选择表单模板
     * @param templateDTO 入参
     * @return EnableVO
     */
    EnableVO enableFormList(TemplateDTO templateDTO);

    /**
     * 打印时，获取选择的实体数据
     * @param paasPrintGetDataDTO 入参
     * @return JSONArray
     * @throws XbbException 异常
     */
    JSONArray getData(PaasPrintGetDataDTO paasPrintGetDataDTO) throws XbbException;

    /**
     * 批量打印时，获取选择的实体数据
     * @param paasPrintGetDatasDTO 入参
     * @return JSONArray
     * @throws XbbException 异常
     */
    JSONArray getDatas(PaasPrintGetDatasDTO paasPrintGetDatasDTO) throws XbbException;

    /**
     *  检查模块是否支持打印
     * @param paasPrintListDTO 入参
     * @return Boolean
     * @throws XbbException 异常
     */
    Boolean checkPrintBusiness(PaasPrintListDTO paasPrintListDTO) throws XbbException;

    /**
     * 检查表单当前模板数量是否已达限制
     * @param paasPrintListDTO 入参
     * @return boolean
     * @throws XbbException xbb异常
     */
    boolean checkPrintTemplateNum(PaasPrintListDTO paasPrintListDTO) throws XbbException;

    /**
     * 编辑打印模板名称
     * @param paasPrintNameEditDTO 入参
     * @return
     * @throws XbbException XbbException
     */
    PaasPrintNameEditVO updatePaasPrintTemplateName(PaasPrintNameEditDTO paasPrintNameEditDTO) throws XbbException;

    /**
     * 打印模板名称查重(同一个菜单下的模板名称不能重复)
     * @param paasPrintNameEditDTO 入参
     * @return
     * @throws XbbException XbbException
     */
    Boolean checkPrintTemplateName(PaasPrintNameEditDTO paasPrintNameEditDTO) throws XbbException;

    /**
     *  获取审批中的业务数据
     * @param paasPrintGetDataByProcessDTO
     * @return
     * @throws XbbException XbbException
     */
    JSONArray getDataByProcess(PaasPrintGetDataByProcessDTO paasPrintGetDataByProcessDTO) throws XbbException;

    /**
     * 批量获取审批中的业务数据
     * @param paasPrintGetDatasByProcessDTO
     * @return
     * @throws XbbException
     */
    JSONArray getDatasByProcess(PaasPrintGetDatasByProcessDTO paasPrintGetDatasByProcessDTO) throws XbbException;

    /**
     * 复制打印模板
     * @param paasPrintEditDTO
     * @return
     * @throws XbbException
     */
    PaasPrintSaveVO copy(PaasPrintEditDTO paasPrintEditDTO) throws XbbException;

    JSONObject initWorkOrderPrintTemplate(BaseDTO baseDTO) throws XbbException;


    /**
     * 表单筛选列表
     * @param processFormFilterDTO
     * @return
     * @throws XbbException
     */
    ProcessFormFilterVO formFilterForPrint(ProcessFormFilterDTO processFormFilterDTO) throws XbbException;

    /**
     * 打印模板排序
     * date: 2022/7/13 4:04 下午
     * @author yingjf
     * @param paasPrintTemplateSortDT:
     */
    BaseVO templateSort(PaasPrintTemplateSortDTO paasPrintTemplateSortDT) throws XbbException;
}
